Managed runtime environments allow software applications to be written in a single programming language and execute a software application on a variety of platforms having dissimilar hardware, operating systems, etc. The ability to execute on a variety of platforms is sometimes referred to as software application portability. Programming languages that are used with managed runtime environments include Java, C#, etc., create intermediate code (e.g., bytecode, dynamic program language instructions, etc.) that can be disseminated to any number of platforms. The managed runtime environment operating at any given platform typically receives and interprets the intermediate code and/or otherwise tailors the intermediate code to operate in a platform-specific manner.
Managed runtime environments are typically implemented as just-in-time (JIT) compilers that receive the intermediate language code (dynamic program language instructions) and convert such code into native or machine code specific to the platform that is to execute the intermediate language code. To improve the speed at which intermediate language code may execute, multi-threading techniques are employed that enable concurrent threads of execution to share or access an object without causing a conflict or contention. Synchronization is typically employed to ensure thread-safe operation for execution of multiple threads at substantially the same time and/or the execution of multiple threads in an alternate order. Generally speaking, synchronization may ensure thread-safe operation by limiting and/or otherwise locking access to a given object so that only a single thread may have access thereto.